package com.yushu.authority.service;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.yushu.authority.pojo.bo.PmMenu;
import com.yushu.authority.pojo.bo.PmRole;
import com.yushu.authority.pojo.bo.PmUser;
import com.yushu.authority.pojo.vo.PmRoleVO;
import com.yushu.authority.pojo.vo.PmUserVO;
import com.yushu.common.util.pager.Pages;

import java.util.List;
import java.util.Map;


/**
 * 
 * @author test
 * @CreateDate 2020-12-03 15:47:25
 */
public interface PmRoleService extends IService<PmRole> {
    PmRole updateByKey(PmRole pmRole);

    List<PmRole> selectList(PmRole pmRole);

    Pages<PmRoleVO> page(Pages<PmRoleVO> page);

    boolean deleteBatch(List<PmRole> pmRoles);

    /**
     * <pre>通过用户查询角色*
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/7/24 19:56
     */
    List<PmRole> selectRolesByUserId(String dataBaseId, String userId);

    @Override
    Map<String, Object> selectMap(Wrapper<PmRole> wrapper);

    /**
     * 更新用户角色关联表数据，先删后插
     *
     * @param roleUserData
     */

    void updateRoleOnUser(Map roleUserData);

    /**
     * <pre>
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/7/25 21:19
     */
    void updateMenuOnRole(Map ruleMenuData);

    /**
     * <pre>查询已选择角色的菜单的交集
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/7/26 11:18
     */
    List<PmMenu> queryIntersections(String[] selectTableDatasJson);

    /**
     * <pre>查询当前用户下的角色
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/7/31 15:30
     */
    List<PmRole> queryRolesOnUsers(List<PmUserVO> users);

    /**
     * <pre>询当前所选择用户下的角色的交集
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/7/31 17:12
     */
    List<PmRole> queryRolesOnUsersIntersections(List<PmUserVO> users);

    /**
     * <pre>更新角色搜索框权限关联表
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/8/7 10:09
     */
    void updateSearchBoxOnRole(Map boxRoleData);

    /**
     * <p>
     * 保存用户和角色
     * </p>
     *
     * @param user 当前用户
     * @return void
     * @author test
     * @since 2019/11/8  12:11
     */
    void saverUserAndRole(PmUser user);

    /**
     * <pre>
     * 批量删除用户角色关联表
     * </pre>
     *
     * @param userMaps 用户外键
     * @return void
     * @author test
     * @since 2019/11/8  12:34
     **/
    void batchDeleteRoleOnUsers(List<Map<String, Object>> userMaps);
    //通过角色ID查询  是否绑定用户
    int selectUserByRoleId(String id);
    /**
     * <pre>删除表的同时，需要删除和表相关联的角色，权限
     * </pre>
     *
     * @param
     * @return
     * @author test
     * @version 1.0
     * @since 2019/8/27 13:32
     */
//    void deleteBatchOnTables(List<ProjectTablesVO> tablesList);

    PmRoleVO queryRoleByKey(String id);

    int selectMenusByRoleId(String ids);

    String checkRepeat(Map map);

    @Override
    boolean updateById(PmRole entity);

    @Override
    boolean insert(PmRole entity);

    /**
     * 查询当前项目下的角色
     *
     * @return
     */
   List<PmRole> queryProjectRoles();

    /*查询当前角色是否被绑定*/
    int queryUserCountOnRole(List<PmRole> pmRoles);
    
    
    boolean saveRole(PmRole pmRole);

    public String validateRoleName(String orgName, String key);
}